home *** CD-ROM | disk | FTP | other *** search
- /*
- * jcexpand.c
- *
- * Copyright (C) 1991, 1992, Thomas G. Lane.
- * This file is part of the Independent JPEG Group's software.
- * For conditions of distribution and use, see the accompanying README file.
- *
- * This file contains image edge-expansion routines.
- * These routines are invoked via the edge_expand method.
- */
-
- #include "jinclude.h"
-
-
- /*
- * Expand an image so that it is a multiple of the MCU dimensions.
- * This is to be accomplished by duplicating the rightmost column
- * and/or bottommost row of pixels. The image has not yet been
- * downsampled, so all components have the same dimensions.
- */
-
- METHODDEF void
- edge_expand (compress_info_ptr cinfo,
- long input_cols, int input_rows,
- long output_cols, int output_rows,
- JSAMPIMAGE image_data)
- {
- /* Expand horizontally */
- if (input_cols < output_cols) {
- register JSAMPROW ptr;
- register JSAMPLE pixval;
- register long count;
- register int row;
- short ci;
- long numcols = output_cols - input_cols;
-
- for (ci = 0; ci < cinfo->num_components; ci++) {
- for (row = 0; row < input_rows; row++) {
- ptr = image_data[ci][row] + (input_cols-1);
- pixval = GETJSAMPLE(*ptr++);
- for (count = numcols; count > 0; count--)
- *ptr++ = pixval;
- }
- }
- }
-
- /* Expand vertically */
- /* This happens only once at the bottom of the image, */
- /* so it needn't be super-efficient */
- if (input_rows < output_rows) {
- register int row;
- short ci;
- JSAMPARRAY this_component;
-
- for (ci = 0; ci < cinfo->num_components; ci++) {
- this_component = image_data[ci];
- for (row = input_rows; row < output_rows; row++) {
- jcopy_sample_rows(this_component, input_rows-1, this_component, row,
- 1, output_cols);
- }
- }
- }
- }
-
-
- /*
- * The method selection routine for edge expansion.
- */
-
- GLOBAL void
- jselexpand (compress_info_ptr cinfo)
- {
- /* just one implementation for now */
- cinfo->methods->edge_expand = edge_expand;
- }
-